export function is(val, type) {
  return toString.call(val) === `[object ${type}]`
}
export function isBoolean(val) {
  return is(val, 'Boolean')
}
// 是否是对象
export function isObject(val) {
  return val !== null && is(val, 'Object')
}
// 校验规则

/* 合法uri */
export function validateURL(textval) {
  const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
  return urlregex.test(textval)
}

/* 小写字母 */
export function validateLowerCase(str) {
  const reg = /^[a-z]+$/
  return reg.test(str)
}

/* 大写字母 */
export function validateUpperCase(str) {
  const reg = /^[A-Z]+$/
  return reg.test(str)
}

/* 大小写字母 */
export function validatAlphabets(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/* 金额 */
export function validatePrice(str) {
  const reg = /^\d+(\.\d{1,3})?$/
  return reg.test(str)
}

/* 验证手机号码 */
export function validatePhone(str) {
  // const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
  return reg.test(str)
}
/* 验证修改邮箱 */
export function validateLoginEmal(str) {
  const reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
  return reg.test(str)
}
/* 验证修改密码双验证 */
export function validatePassword(str) {
  const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$/
  return reg.test(str)
}
/* 注册社会信用代码验证 */
export function validateCreditCode(str) {
  const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,16}$/
  return reg.test(str)
}

/* 验证邮箱合法性 */
export function validateEmail(str) {
  const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(str)
}

/* 验证不能为空 */
export function validateNull(str) {
  if (!str) {
    return false
  }
  return true
}
/* 验证8位整数，两位小数 */
export function validatStandrdNum(str) {
  var reg = /^\d+(\.\d{1,2})?$/
  return reg.test(str)
}
/* 验证8位整数，两位小数,不能为0 */
export function validatNormalNum(str) {
  if (str === 0) {
    return false
  } else {
    var reg = /^\d+(\.\d{1,2})?$/
    return reg.test(str)
  }
}
// 验证汇率
export function validatrate(str) {
  var reg = /^\d{1,8}(\.\d{1,8})?$/
  return reg.test(str)
}
/* 验证8位整数，两位小数 包括0 */
export function validatlooseNum(str) {
  // eslint-disable-next-line eqeqeq
  if (str == 0) {
    return true
  } else {
    var reg = /^\d+(\.\d{1,2})?$/
    return reg.test(str)
  }
}
/* 验证8位整数，两位小数 */
export function valistandrdMoney(str) {
  var reg = /^\d{1,8}(\.\d{1,2})?$/
  return reg.test(str)
}

/* 验证12位整数，两位小数 */
export function valiLargeMoney(str) {
  var reg = /^\d{1,12}(\.\d{1,2})?$/
  return reg.test(str)
}
// 正整数
export function isInteger(num) {
  return /^[1-9]\d*$/.test(num)
}

/* 只能为数字 */
export function validateNum(str) {
  var reg = /^\d+$|^\d+[.]?\d+$/
  return reg.test(str)
}
// 只能为纯数字
export function validateonlyNum(str) {
  var reg = /^\d+$|^\d+$/
  return reg.test(str)
}
// 验证座机
export function valilandline(str) {
  var reg = /^0\d{2,3}-?\d{7,8}$/
  return reg.test(str)
}
// 验证只能为正整数
export function valilinteger(str) {
  var reg = /^[0-9]*$/
  return reg.test(str)
}
// 验证邮政编码
export function valipostalCode(str) {
  var reg = /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/
  return reg.test(str)
}
// 验证社会信用代码
export function valiCreditCode(str) {
  var reg = /^(([0-9A-Za-z]{15})|([0-9A-Za-z]{17})|([0-9A-Za-z]{18})|([0-9A-Za-z]{20}))$/
  return reg.test(str)
}
// 验证只能为数字和字母
export function valiOthercode(str) {
  var reg = /^([0-9A-Za-z@]+)$/
  return reg.test(str)
}
// 验证网址
export function valiWebsit(str) {
  var reg = /^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/
  return reg.test(str)
}
/* 只能为正数 */
export function validatePositiveNum(str) {
  var reg = /^([0-9]\d*(.\d{1,2})?)$|^(0.\d?[1-9])$|^(0.[1-9]\d?)$/
  return reg.test(str)
}

export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
  const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
  return reg.test(email)
}

/**
 * @param {string} blhcnEmail
 * @returns {Boolean}
 */
export function validBlhcnEmail(blhcnEmail) {
  const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@zhichubao.com$/
  return reg.test(blhcnEmail)
}

/**
 * @param {string} num
 * @returns {Boolean}
 */
export function isNumber(num) {
  if (typeof Number(num) === 'number' && !isNaN(Number(num))) {
    return true
  }
  return false
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function isString(str) {
  if (typeof str === 'string' || str instanceof String) {
    return true
  }
  return false
}

/**
 * @param {Array} arg
 * @returns {Boolean}
 */
export function isArray(arg) {
  if (typeof Array.isArray === 'undefined') {
    return Object.prototype.toString.call(arg) === '[object Array]'
  }
  return Array.isArray(arg)
}

/**
 * @param {string} mobile
 * @returns {Boolean}
 */
export function validMobile(mobile) {
  const reg = /^1[3456789]\d{9}$/
  return reg.test(mobile)
}

/**
 * @param {string} mobile
 * @returns {Boolean}
 * 验证非零的正整数
 */
export function validPositiveIntegerNum(num) {
  const reg = /^\+?[1-9]\d*$/
  return reg.test(num)
}

/**
 * @param {string} password
 * @returns {Boolean}
 */
export function validPassword(password) {
  const reg = /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,20}$/
  return reg.test(password)
}
/**
 * @param {string} password
 * @returns {Boolean}
 */
export function validPasswordNew(password) {
  const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d@$!%*?&]{8,}$/
  return regex.test(password)
}
/**
 * @param {string} password
 * @returns {Boolean}
 */
export function validPasswordNew20(password) {
  const reg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,20}$/
  return reg.test(password)
}
/**
 * @param {string} num
 * @returns {Boolean}
 */
export function validNum(num) {
  const reg = /^\d+$/
  return reg.test(num)
}

/**
 * @param {string} money
 * @returns {Boolean}
 */
export function validMoney(money) {
  const reg = /^(\+)?\d+(\.\d+)?$/
  return reg.test(money)
}

/**
 * @param {string} 中文或英文
 * @returns {Boolean}
 */
export function validChinese(val) {
  const reg = /[\u4e00-\u9fa5a-zA-Z]+$/
  return reg.test(val)
}

/**
 * @param {string} 中文或英文或数字
 * @returns {Boolean}
 */
export function validProjectName(val) {
  const reg = /^[\u4E00-\u9FA5A-Za-z0-9]+$/
  return reg.test(val)
}
// 回显自定义字段处理
export function extendMapHandle(extendMap, details) {
  let newData = {}
  for (let key in extendMap) {
    if (details) {
      newData[key] = extendMap[key].content
    } else if (extendMap[key].dataType == 'SELECT_ONE') {
      newData[key] = extendMap[key].code[0]
    } else if (extendMap[key].dataType == 'SELECT_MULTIPLE') {
      newData[key] = extendMap[key].code
    } else {
      newData[key] = extendMap[key].content
    }
  }
  return newData
}
export const isFunction = (val) => typeof val === 'function'

export function isEmptyObject(obj) {
  return JSON.stringify(obj) === "{}";
}
// 格式金额 123,456.02 // 千分符号（展示位）的合计
export function formatTotalMoney(value, precision) {
  var n = precision //两位小数
  n = n > 0 && n <= 20 ? n : 2
  // eslint-disable-next-line
  // value = (value * Math.pow(10, n)).toString().split('.')[0] / Math.pow(10, n)
  value = value.toString()
  // 正数、负数
  let negativeNumber = false
  if (value * 1 < 0) {
    negativeNumber = true
  }
  value = Math.abs(value)
  if (value.toString().split('.') !== -1) {
    value = parseFloat((value + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''
  }
  var l = value
    .split('.')[0]
    .split('')
    .reverse(),
    r = value.split('.')[1]
  var t = ''
  for (var i = 0; i < l.length; i++) {
    t += l[i] + ((i + 1) % 3 == 0 && i + 1 != l.length ? ',' : '')
  }
  let fuhao = '.' + r
  if (negativeNumber) {
    return (
      '-' +
      t
        .split('')
        .reverse()
        .join('') +
      fuhao
    )
  } else {
    return (
      t
        .split('')
        .reverse()
        .join('') + fuhao
    )
  }
}
/* 18位数字和大写字母 */
export function validateUppercase18(str) {
  const reg = /^[A-Z0-9]{18}$/
  return reg.test(str)
}
// 只能为纯数字 长度9位
export function validateNum9(str) {
  // var reg = /^[0-9]{9}$/
  var reg = /^\d{9}$/
  return reg.test(str)
}